home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyTEPrinting.p < prev    next >
Encoding:
Text File  |  1996-05-29  |  1.7 KB  |  78 lines  |  [TEXT/CWIE]

  1. unit MyTEPrinting;
  2.  
  3. interface
  4.  
  5.     uses
  6.         MyPrinting;
  7.  
  8.     type
  9.         TEPObject = object(PObject)
  10.                 te: TEHandle;
  11.                 function CountPages (r: Rect): integer;
  12.                 override;
  13.                 function DrawPage (r: Rect; gp: GrafPtr; pg: integer; first, last: boolean): OSErr;
  14.                 override;
  15.             end;
  16.  
  17. implementation
  18.  
  19.     function GetNextStart (r: Rect; startline: integer; te: TEHandle): integer;
  20.         var
  21.             hite, endline: integer;
  22.     begin
  23.         hite := r.bottom - r.top;
  24.         endline := startline;
  25.         while (endline <= te^^.nLines) & (TEGetHeight(endline, startline, te) < hite) do begin
  26.             endline := endline + 1;
  27.         end;
  28.         GetNextStart := endline;
  29.     end;
  30.  
  31.     function TEPObject.CountPages (r: Rect): integer;
  32.         var
  33.             count, startline: integer;
  34.     begin
  35.         count := 0;
  36.         startline := 1;
  37.         while startline <= te^^.nLines do begin
  38.             startline := GetnextStart(r, startline, te);
  39.             count := count + 1;
  40.         end;
  41.         CountPages := count;
  42.     end;
  43.  
  44.     function TEPObject.DrawPage (r: Rect; gp: GrafPtr; pg: integer; first, last: boolean): OSErr;
  45.         var
  46.             startline, endline, i, offset: integer;
  47.             oldport, oldinport: GrafPtr;
  48.             vr, dr: Rect;
  49.     begin
  50.         Getport(oldport);
  51.         SetPort(gp);
  52.         oldinport := te^^.inPort;
  53.         te^^.inPort := gp;
  54.         vr := te^^.viewRect;
  55.         dr := te^^.destRect;
  56.         startline := 1;
  57.         for i := 1 to pg - 1 do begin
  58.             startline := GetNextStart(r, startline, te);
  59.         end;
  60.         endline := GetNextStart(r, startline, te) - 1;
  61.         r.bottom := r.top + TEGetHeight(endline, startline, te);
  62.         if startline = 1 then begin
  63.             offset := 0;
  64.         end
  65.         else begin
  66.             offset := TEGetHeight(startline - 1, 1, te);
  67.         end;
  68.         te^^.viewRect := r;
  69.         te^^.destRect.top := te^^.viewRect.top - offset;
  70.         TEUpdate(r, te);
  71.         te^^.viewRect := vr;
  72.         te^^.destRect := dr;
  73.         te^^.inPort := oldinport;
  74.         Setport(oldport);
  75.         DrawPage := noErr;
  76.     end;
  77.  
  78. end.